<?php

/**
 * Classe représentant d'un forum.
 * @author CHAGNON Laura, LESAGE Alexandre, BALMAND Clémence
 * @since 24 septembre 2013
 * @version 1.0
 */

class Forum
{
		/*Attributs*/
	/**
	 * Identifiant du forum
	 * @var int
	 */
	private $_id;

	/**
	 * Identifiant de l'action associée au forum
	 * @var int
	 */
	private $_id_adc;

	/**
	 * Titre du forum
	 * @var string
	 */
	private $_titre;

	/**
	 *  Commentaire lié au forum
	 *  @var string
	 */
	private $_commentaire;

	/**
	 * Date du forum
	 * @var date
	 */
	private $_date;

	/**
	 * Date limite d'inscription au forum
	 * @var date
	 */
	private $_date_limite;

	/**
	 * Lieu où se passe le forum
	 * @var string
	 */
	private $_lieu;

	/**
	 * Nom du lycée où se passe le forum
	 * @var string
	 */
	private $_nomLycee;

	/**
	 * Heure du début du forum
	 * @var string
	 */
	private $_heureDeb;

	/**
	 * Heure de la fin du forum
	 * @var string
	 */
	private $_heureFin;

	/**
	 * Note maximum du forum
	 * @var float
	 */
	private $_note_max;

	/**
	 * Login de l'enseignant encadrant
	 * @var string
	 */
	private $_login_enseignant;

	/**
	 * L'id de l'etat du forum
	 * @var int
	 */
	private $_id_etat;

	/**
	 * L'id de l'étudiant 1 associés au forum
	 * @var int
	 */
	private $_id_etu1;

	/**
	 * L'id de l'étudiant 2 associés au forum
	 * @var int
	 */
	private $_id_etu2;

	/**
	 * Note de l'étudiant 1 du forum
	 * @var float
	 */
	private $_note_etu1;

	/**
	 * Note de l'étudiant 2 du forum
	 * @var float
	 */
	private $_note_etu2;

	/*Constructeur */

	public function __construct()
	{
		$args = func_get_args();

		switch(func_num_args())
		{
			case 1 : // juste l'id du forum.
				$this->set_id($args[0]);
				break;
			case 11 :
				$this->set_titre($args[0]);
				$this->set_commentaire($args[1]);
				$this->set_date($args[2]);
				$this->set_date_limite($args[3]);
				$this->set_heureDeb($args[4]);
				$this->set_heureFin($args[5]);
				$this->set_note_max($args[6]);
				$this->set_lieu($args[7]);
				$this->set_nomLycee($args[8]);
				$this->set_login_enseignant($args[9]);
				$this->set_id_adc($args[10]);
				break;
			case 16 : // ID_ETAT, TITRE_FORUM, COMMENTAIRE_FORUM, DATE_FORUM, DATE_LIMITE_FORUM, HEURE_DEB_FORUM, HEURE_FIN_FORUM, NOTE_MAX_FORUM, LIEU_FORUM, NOM_LYCEE_FORUM, LOGIN_PROF, ID_ETU1_FORUM, ID_ETU2_FORUM, NOTE_ETU1_FORUM, NOTE_ETU2_FORUM, ID_ADC_FORUM
				$this->set_id_etat($args[0]);
				$this->set_titre($args[1]);
				$this->set_commentaire($args[2]);
				$this->set_date($args[3]);
				$this->set_date_limite($args[4]);
				$this->set_heureDeb($args[5]);
				$this->set_heureFin($args[6]);
				$this->set_note_max($args[7]);
				$this->set_lieu($args[8]);
				$this->set_nomLycee($args[9]);
				$this->set_login_enseignant($args[10]);
				$this->set_id_etu1($args[11]);
				$this->set_id_etu2($args[12]);
				$this->set_note_etu1($args[13]);
				$this->set_note_etu2($args[14]);
				$this->set_id_adc($args[15]);
				break;
			case 17 : // ID_FORUM, ID_ETAT, TITRE_FORUM, COMMENTAIRE_FORUM, DATE_FORUM, DATE_LIMITE_FORUM, HEURE_DEB_FORUM, HEURE_FIN_FORUM, NOTE_MAX_FORUM, LIEU_FORUM, NOM_LYCEE_FORUM, LOGIN_PROF, ID_ETU1_FORUM, ID_ETU2_FORUM, NOTE_ETU1_FORUM, NOTE_ETU2_FORUM, ID_ADC_FORUM
				$this->set_id($args[0]);
				$this->set_id_etat($args[1]);
				$this->set_titre($args[2]);
				$this->set_commentaire($args[3]);
				$this->set_date($args[4]);
				$this->set_date_limite($args[5]);
				$this->set_heureDeb($args[6]);
				$this->set_heureFin($args[7]);
				$this->set_note_max($args[8]);
				$this->set_lieu($args[9]);
				$this->set_nomLycee($args[10]);
				$this->set_login_enseignant($args[11]);
				$this->set_id_etu1($args[12]);
				$this->set_id_etu2($args[13]);
				$this->set_note_etu1($args[14]);
				$this->set_note_etu2($args[15]);
				$this->set_id_adc($args[16]);
				break;
			default:
				trigger_error('Constructeur de Forum avec ' + func_num_args() + ' non défini.');
				break;
		}

	}

	/* Méthodes */
	/**
	 * Fonction permettant d'écrire un date de la forme JJ-MM-AAAA en AAAA-MM-JJ.
	 * @param string $date
	 * @return string
	 */
	private function putDateAAAAMMJJ($date)
	{
		$d = preg_split("-/-", $date);
		return $d[2]."-".$d[1]."-".$d[0];
	}

	/*Methode Base de données*/

	/**
	 * Permet de récupérer tous les forums
	 */
	public static function getForum()
	{
		$forum = false;
		$bdd = PDO2::getInstance();
		$donnees = $bdd->query(REQ_ALL_FORUM);
		$donnees = $donnees->fetchAll();
		foreach($donnees as $d)
		{
			$forum[] = new Forum($d[ID_FORUM], $d[ETAT_FORUM], $d[TITRE_FORUM], $d[COMMENTAIRE_FORUM], $d[DATE_FORUM], $d[DATE_LIMITE_FORUM], $d[HEURE_DEB_FORUM], $d[HEURE_FIN_FORUM], $d[NOTE_MAX_FORUM], $d[LIEU_FORUM], $d[NOM_LYCEE_FORUM], $d[LOGIN_PROF], $d[ID_ETU1_FORUM], $d[ID_ETU2_FORUM], $d[NOTE1_FORUM], $d[NOTE2_FORUM], $d[ID_ADC_FORUM]);
		}

		return $forum;
	}

	public static function getAllForum($id_adc, $filtre)
	{
		$forum = false;
		// On se connecte  à la BDD
		$bdd = PDO2::getInstance();
		if($filtre == DATE_FORUM)
			$donnees = $bdd->query(REQ_ALL_FORUM.'
									WHERE F.'.ID_ADC_FORUM.' = \''.$id_adc.'\'
									ORDER BY YEAR('.$filtre.'), MONTH('.$filtre.'), DAY('.$filtre.')'); // On lance la requête
		else
			$donnees = $bdd->query(REQ_ALL_FORUM.'
									WHERE F.'.ID_ADC_FORUM.' = \''.$id_adc.'\'
									ORDER BY '.$filtre); // On lance la requête
		$donnees = $donnees->fetchAll(); // On recupére toutes les données sous forme d'un tableau associatif

		foreach($donnees as $d)
		{
			$forum[] = new Forum($d[ID_FORUM], $d[ETAT_FORUM], $d[TITRE_FORUM], $d[COMMENTAIRE_FORUM], $d[DATE_FORUM], $d[DATE_LIMITE_FORUM], $d[HEURE_DEB_FORUM], $d[HEURE_FIN_FORUM], $d[NOTE_MAX_FORUM], $d[LIEU_FORUM], $d[NOM_LYCEE_FORUM], $d[LOGIN_PROF], $d[ID_ETU1_FORUM], $d[ID_ETU2_FORUM], $d[NOTE1_FORUM], $d[NOTE2_FORUM], $d[ID_ADC_FORUM]);
		}

		return $forum;
	}


	public function getOneForum()
	{
		$bdd = PDO2::getInstance();
		$donnees = $bdd->query(	REQ_ALL_FORUM.'
								WHERE F.'.ID_FORUM.' = \''.$this->get_id().'\'');
		$d = $donnees->fetch();

		$this->set_titre($d[TITRE_FORUM]);
		$this->set_id_etat($d[ETAT_FORUM]);
		$this->set_id_adc($d[ID_ADC_FORUM]);
		$this->set_login_enseignant($d[LOGIN_PROF_FORUM]);
		$this->set_lieu($d[LIEU_FORUM]);
		$this->set_id_etu1($d[ID_ETU1_FORUM]);
		$this->set_id_etu2($d[ID_ETU2_FORUM]);
		$this->set_note_max($d[NOTE_MAX_FORUM]);
		$this->set_note_etu1($d[NOTE1_FORUM]);
		$this->set_note_etu2($d[NOTE2_FORUM]);
		$this->set_date($d[DATE_FORUM]);
		$this->set_date_limite($d[DATE_LIMITE_FORUM]);
		$this->set_heureDeb($d[HEURE_DEB_FORUM]);
		$this->set_heureFin($d[HEURE_FIN_FORUM]);
		$this->set_commentaire($d[COMMENTAIRE_FORUM]);
		$this->set_nomLycee($d[NOM_LYCEE_FORUM]);
	}

	public function get_code()
	{
		$bdd = PDO2::getInstance();

		$numero = $bdd->query(	'
									SELECT COUNT( * )
									FROM '.TABLE_FORUM.'
									WHERE '.ID_FORUM.' <= '.$this->get_id().'
									ORDER BY '.ID_ADC.' ASC
								');

		$numero = $numero->fetch();
		switch($this->get_adc()->get_theme()->get_libelle())
		{
			case 'FORUM':
				return 'A'.$numero[0];
				break;
			case 'DPT INFO':
				return 'B'.$numero[0];
				break;
			case 'BDE ODIN':
				return 'C'.$numero[0];
				break;
			default:
				return 'err';
				break;
		}
	}

	public static function getUserForum($id,$filtre)
	{
		// On se connecte  à la BDD
		$bdd = PDO2::getInstance();

		$donnees = $bdd->query(	REQ_ALL_FORUM.'
								WHERE '.TITRE_FORUM.' <> "'.LUNDI.'"
								AND (F.'.LOGIN_PROF_FORUM.' = \''.$id.'\' OR '.ID_ETU1_FORUM.' = \''.$id.'\' OR '.ID_ETU2_FORUM.' = \''.$id.'\')
								ORDER BY '.$filtre);

		$forum = false;

		while($d = $donnees->fetch())
		{
			$forum[] = new Forum($d[ID_FORUM], $d[ETAT_FORUM], $d[TITRE_FORUM], $d[COMMENTAIRE_FORUM], $d[DATE_FORUM], $d[DATE_LIMITE_FORUM], $d[HEURE_DEB_FORUM], $d[HEURE_FIN_FORUM], $d[NOTE_MAX_FORUM], $d[LIEU_FORUM], $d[NOM_LYCEE_FORUM], $d[LOGIN_PROF], $d[ID_ETU1_FORUM], $d[ID_ETU2_FORUM], $d[NOTE1_FORUM], $d[NOTE2_FORUM], $d[ID_ADC_FORUM]);
		}

		return $forum;
	}

	public function saveOneForum()
	{
	$bdd = PDO2::getInstance();
		if($this->get_login_enseignant() == null)
			$login = "null";
		else
			$login = '"'.$this->get_login_enseignant().'"';

		if($this->get_date() == null)
			$dateD = "null";
		else
			$dateD = '"'.$this->putDateAAAAMMJJ($this->get_date()).'"';

		if($this->get_date_limite() == null)
			$dateL = $dateD;
		else
			$dateL = '"'.$this->putDateAAAAMMJJ($this->get_date_limite()).'"';

		if($this->get_note_max() == null)
			$note = "null";
		else
			$note = '"'.$this->get_note_max().'"';

		if($this->get_heureFin() == null)
			$heureF = "null";
		else
			$heureF = '"'.$this->get_heureFin().'"';

		if($this->get_heureDeb() == null)
			$heureD = "null";
		else
			$heureD = '"'.$this->get_heureDeb().'"';

		if($this->get_nomLycee() == null)
			$lycee = "null";
		else
			$lycee = '"'.$this->get_nomLycee().'"';

		if($this->get_commentaire() == null)
			$commentaire = "null";
		else
			$commentaire = '"'.$this->get_commentaire().'"';

		$result = $bdd->exec('INSERT INTO '.TABLE_FORUM.' ('.TITRE_FORUM.', '.ID_ADC_FORUM.', '.COMMENTAIRE_FORUM.', '.DATE_FORUM.', '.DATE_LIMITE_FORUM.', '.LIEU_FORUM.', '.NOM_LYCEE_FORUM.', '.HEURE_DEB_FORUM.', '.HEURE_FIN_FORUM.', '.NOTE_MAX_FORUM.', '.LOGIN_PROF_FORUM.', '.CODE_ETAT.')
				VALUES ("'.$this->get_titre().'", '.$this->get_id_adc().', '.$commentaire.', '.$dateD.', '.$dateL.', "'.$this->get_lieu().'",'.$lycee.','.$heureD.','.$heureF.','.$note.','.$login.', 1)');
	}
	public function modifOneForum()
	{
		$bdd = PDO2::getInstance();
		if($this->get_login_enseignant() == null)
			$login = "null";
		else
			$login = '"'.$this->get_login_enseignant().'"';

		if($this->get_date() == null)
			$dateD = "null";
		else
			$dateD = '"'.$this->putDateAAAAMMJJ($this->get_date()).'"';

		if($this->get_date_limite() == null)
			$dateL = $dateD;
		else
			$dateL = '"'.$this->putDateAAAAMMJJ($this->get_date_limite()).'"';

		if($this->get_note_max() == null)
			$note = "null";
		else
			$note = '"'.$this->get_note_max().'"';

		if($this->get_heureFin() == null)
			$heureF = "null";
		else
			$heureF = '"'.$this->get_heureFin().'"';

		if($this->get_heureDeb() == null)
			$heureD = "null";
		else
			$heureD = '"'.$this->get_heureDeb().'"';

		if($this->get_nomLycee() == null)
			$lycee = "null";
		else
			$lycee = '"'.$this->get_nomLycee().'"';

		if($this->get_commentaire() == null)
			$commentaire = "null";
		else
			$commentaire = '"'.$this->get_commentaire().'"';

		$result = $bdd->exec(	'UPDATE '.TABLE_FORUM.'
							SET '.TITRE_FORUM.' = "'.$this->get_titre().'", '.COMMENTAIRE_FORUM.' = '.$commentaire.', '.DATE_FORUM.' = '.$dateD.', '.DATE_LIMITE_FORUM.' = '.$dateL.', '.ID_ADC_FORUM.' = '.$this->get_id_adc().', '.LIEU_FORUM.' = "'.$this->get_lieu().'", '.NOM_LYCEE_FORUM.' = '.$lycee.', '.HEURE_DEB_FORUM.' = '.$heureD.', '.HEURE_FIN_FORUM.' = '.$heureF.', '.NOTE_MAX_FORUM.' ='.$note.', '.LOGIN_PROF_FORUM.' ='.$login.'
							WHERE '.ID_FORUM.' = '.$this->get_id());

		if($result == 0)
			return false;
		else
			return true;
	}
	public function delOneForum()
	{
		$bdd = PDO2::getInstance();
		$result = $bdd->exec(	'DELETE FROM '.TABLE_FORUM.'
								WHERE '.ID_FORUM.' = \''.$this->get_id().'\'');
		if(result == 0)
			return false;
		else
			return true;
	}

	/**
	 * Enregistre la note de l'etudiant 1
	 * @param $note
	 * @return boolean
	 */
	function noter1($note)
	{
		$bdd = PDO2::getInstance();
		$result= $bdd->exec(
				'UPDATE '.TABLE_FORUM.'
				SET '.NOTE1_FORUM.' = '.$note.'
				WHERE '.ID_FORUM.' = '.$this->get_id());
		if($result == 0)
			return false;
		else
			return true;
	}

	/**
	 * Enregistre la note de l'etudiant 2
	 * @param $note
	 * @return boolean
	 */
	function noter2($note)
	{
		$bdd = PDO2::getInstance();
		$result= $bdd->exec(
				'UPDATE '.TABLE_FORUM.'
				SET '.NOTE2_FORUM.' = '.$note.'
				WHERE '.ID_FORUM.' = '.$this->get_id());

		if($result == 0)
			return false;
		else
			return true;
	}

	/**
	 * Permet de savoir si l'étudiant participe au forum.
	 * @param int $idEtu Identifiant de l'étudiant susceptible de participer au forum
	 * @return boolean true si l'étudiant participe sinon false
	 */
	public function is_participeForum($idEtu)
	{
		$bdd = PDO2::getInstance();
		$donnees = $bdd->query(	'
									SELECT COUNT(*)
									FROM '.TABLE_FORUM.'
									WHERE ('.ID_ETU1_FORUM.' = '.$idEtu.'
										OR '.ID_ETU2_FORUM.' = '.$idEtu.')
										AND '.ID_FORUM.' = '.$this->get_id().'
								');
		if( $donnees->fetchColumn() > 0)
			return true;
		else
			return false;
	}

	/**
	 * Permet de savoir si l'étudiant participe à un forum de l'Action de communication liée.
	 * @param int $idEtu
	 * @return boolean true si l'étudiant participe sinon false
	 */
	public function is_participeAllForum($idEtu)
	{
		$bdd = PDO2::getInstance();
		$donnees = $bdd->query(	'
				SELECT COUNT(*)
				FROM '.TABLE_FORUM.'
				WHERE ('.ID_ETU1_FORUM.' = '.$idEtu.'
				OR '.ID_ETU2_FORUM.' = '.$idEtu.')
				AND '.ID_ADC_FORUM.' = '.$this->get_id_adc().'
				');
		if( $donnees->fetchColumn() > 0)
			return true;
		else
			return false;
	}

	/**
	 * Permet de savoir si l'étudiant est inscrit à la liste d'attente du forum.
	 * @param int $idetu Identifiant de l'étudiant susceptible de participer
	 * @return boolean true si l'étudiant est dans la liste d'attente sinon false
	 */
	public function is_attenteForum($idetu)
	{
		$bdd = PDO2::getInstance();
		$donnees = $bdd->query(	'
				SELECT COUNT(*)
				FROM '.TABLE_ATTENTE_FORUM.'
				WHERE '.ID_ETU_ATTENTE_FORUM.' = '.$idetu.'
				AND '.ID_FORUM_ATTENTE_FORUM.' = '.$this->get_id().'
				');
		if( $donnees->fetchColumn() > 0)
			return true;
		else
			return false;
	}

	/**
	 * Permet de compter le nombre de forums où l'étudiant est inscrit (pour les lundis de l'info).
	 * @param int $idEtu Identifiant de l'étudiant susceptible de participer au forum
	 * @return boolean true si l'étudiant participe à moins de 2 forums sinon false
	 */
	public function nb_etu_Forum($idEtu)
	{
		$bdd = PDO2::getInstance();
		$donnees = $bdd->query(	'
				SELECT COUNT(*)
				FROM '.TABLE_FORUM.'
				WHERE ('.ID_ETU1_FORUM.' = '.$idEtu.'
				OR '.ID_ETU2_FORUM.' = '.$idEtu.')
				AND '.ID_ADC_FORUM.' = '.$this->get_id_adc().'
				');
		if( $donnees->fetchColumn() < 2)
			return true;
		else
			return false;
	}

	/**
	 * Permet de savoir si l'étudiant est inscrit à l'Action de communication liée au furum.
	 * @param int $idEtu
	 * @return boolean true si l'étudiant est inscrit à l'Action de communication sinon false
	 */
	public function isParticipeADCGroupable($idEtu)
	{
		$bdd = PDO2::getInstance();
		$donnees = $bdd->query(	'
				SELECT COUNT(*)
				FROM '.TABLE_PARTICIPE.'
				WHERE '.ID_ETU_PARTICIPE.' = '.$idEtu.'
				AND '.ID_ADC_PARTICIPE.' = '.$this->get_id_adc());

		if( $donnees->fetchColumn() > 0)
			return true;
		else
			return false;
	}

	/**
	 * Permet d'ajouter un étudiant au forum.
	 * @param int $idetu L'identifiant de l'étudiant
	 * @return boolean true si tous s'est bien passé, false sinon. La variable $_SESSION['message'] est alimentée.
	 */
	public function addEtudiant($idetu)
	{
		$donnees = true;
		$bdd = PDO2::getInstance();

		if($this->get_id_etu1() != $idetu && $this->get_id_etu2() != $idetu)
		{
			if(is_null($this->get_id_etu1()) || $this->get_id_etu1()=="NULL") // La place est libre
			{
				$this->set_id_etu1($idetu);
				//Mise à jour de la BDD
				$donnees = $bdd->query(	'
											UPDATE '.TABLE_FORUM.'
											SET '.ID_ETU1_FORUM.' = \''.$idetu.'\'
											WHERE '.ID_FORUM.' = '.$this->get_id().'
										');
			}
			elseif(is_null($this->get_id_etu2()) || $this->get_id_etu2()=="NULL")
			{
				$this->set_id_etu2($idetu);
				//Mise à jour de la BDD
				$donnees = $bdd->query(	'
											UPDATE '.TABLE_FORUM.'
											SET '.ID_ETU2_FORUM.' = \''.$idetu.'\'
											WHERE '.ID_FORUM.' = '.$this->get_id().'
										');
			}
			else // Les deux places sont prises
			{
				$_SESSION['message'] = 'Les deux places sont prises.';
				return;
			}
		}
		else
		{
			$_SESSION['message'] = 'Vous êtes déjà inscrit.';
			return;
		}

		if(!is_null($this->get_id_etu1()) && !is_null($this->get_id_etu2()))
		{
			$result= $bdd->exec(
					'UPDATE '.TABLE_FORUM.'
					SET '.CODE_ETAT.' = 2
					WHERE '.ID_FORUM.' = '.$this->get_id().'');
			$this->set_id_etat(3);
		}

		if(!$this->isParticipeADCGroupable($idetu))
		{
			$result= $bdd->exec(
					'INSERT INTO '.TABLE_PARTICIPE.' ('.ID_ETU_PARTICIPE.', '.ID_ADC_PARTICIPE.')
					VALUES ('.$idetu.', '.$this->get_id_adc().')');
		}

		if(!$donnees) // Si la requête à rencontrer des problèmes...
			$_SESSION['message'] = 'Un problème est survenu lors de l\'inscription';
		else
			$_SESSION['message'] = 'Vous avez bien été inscrit au forum !';
	}

	/**
	 * Permet de desinscrire un étudiant à l'action de communication.
	 * @param int $idetu L'identifiant de l'étudiant
	 * @return boolean true si tous s'est bien passé, false sinon. La variable $_SESSION['message'] est alimenté.
	 */
	public function deleteEtudiant($idetu)
	{
		$donnees = true;

		if($this->get_id_etu1() == $idetu) // Si l'étudiant est à la première place
		{
			$this->set_id_etu1("NULL");
			//Mise à jour de la BDD
			$bdd = PDO2::getInstance();
			$donnees = $bdd->query(	'
										UPDATE '.TABLE_FORUM.'
										SET '.ID_ETU1_FORUM.' = NULL
										WHERE '.ID_FORUM.' = '.$this->get_id().'
									');
		}
		else // La deuxième
		{
			$this->set_id_etu2("NULL");
			//Mise à jour de la BDD
			$bdd = PDO2::getInstance();
			$donnees = $bdd->query(	'
										UPDATE '.TABLE_FORUM.'
										SET '.ID_ETU2_FORUM.' = NULL
										WHERE '.ID_FORUM.' = '.$this->get_id().'
									');

		}
		$attente = $bdd->query(	'SELECT COUNT(*)
				FROM '.TABLE_ATTENTE_FORUM.'
				WHERE '.ID_FORUM_ATTENTE_FORUM.' = '.$this->get_id());

		if( $attente->fetchColumn() > 0)
		{
			$etu = $bdd->query(	'SELECT '.ID_ETU_ATTENTE_FORUM.'
					FROM '.TABLE_ATTENTE_FORUM.'
					WHERE '.ID_FORUM_ATTENTE_FORUM.' = '.$this->get_id().'
					AND '.RANG_ATTENTE_FORUM.' = 1');
			$etu = $etu->fetch();
			$etudiant = new Etudiants($etu[ID_ETU_ATTENTE_ADC]);
			$this->addEtudiant($etudiant->get_id());
			$this->desinscrireAttenteForum($etudiant->get_id());
		}
		else
		{
			$result= $bdd->exec(
					'UPDATE '.TABLE_FORUM.'
					SET '.CODE_ETAT.' = 1
					WHERE '.ID_FORUM.' = '.$this->get_id().'');
			$this->set_id_etat(1);
		}

		if(!$this->is_participeAllForum($idetu))
		{
			if($this->get_titre()!=LUNDI)
				$result= $bdd->exec(
						'DELETE FROM '.TABLE_PARTICIPE.'
							WHERE '.ID_ADC_PARTICIPE.' = '.$this->get_id_adc().'
							AND '.ID_ETU_PARTICIPE.' = '.$idetu);
		}

		if(!$donnees) // Si la requête à rencontrer des problèmes...
			$_SESSION['message'] = 'Un problème est survenu lors de la desinscritpion';
		else
			$_SESSION['message'] = 'Vous avez bien été désinscrit du forum !';
	}

	/**
	 * Permet de récupérer le rang d'un étudiant en liste d'attente du forum
	 * @param int $idetu L'identifiant de l'étudiant
	 * @return int
	 */
	public function rangAttenteForum($idetu)
	{
		$bdd = PDO2::getInstance();
		$rang = $bdd->query('SELECT '.RANG_ATTENTE_FORUM.'
				FROM '.TABLE_ATTENTE_FORUM.'
				WHERE '.ID_FORUM_ATTENTE_FORUM.' = '.$this->get_id().'
				AND '.ID_ETU_ATTENTE_FORUM.' = '.$idetu);
		$rang = $rang->fetch();

		return $rang[RANG_ATTENTE_FORUM];
	}

	/**
	 * Permet d'inscrire un étudiant en liste d'attente du forum
	 * @param int $idetu L'identifiant de l'étudiant
	 * @return boolean true si tout s'est bien passé, false sinon. La variable $_SESSION['message'] a été alimentée.
	 */
	public function inscrireAttenteForum($idetu)
	{
		$bdd = PDO2::getInstance();
		$rang = $bdd->query('SELECT MAX('.RANG_ATTENTE_FORUM.') as "'.RANG_ATTENTE_FORUM.'"
				FROM '.TABLE_ATTENTE_FORUM.'
				WHERE '.ID_FORUM_ATTENTE_FORUM.' = '.$this->get_id());

		$rang = $rang->fetch();

		if(is_null($rang[RANG_ATTENTE_FORUM]))
			$r = 1;
		else
			$r = $rang[RANG_ATTENTE_FORUM] + 1;

		$donnees = $bdd->query(	'INSERT INTO '.TABLE_ATTENTE_FORUM.'
				VALUES (\''.$this->get_id().'\', \''.$idetu.'\', '.$r.')');

		if(!$donnees)
			$_SESSION['message'] = 'Un problème est survenu lors de l\'inscription à la liste d\'attente.';
		else
			$_SESSION['message'] = 'Vous avez bien été inscrit à la liste d\'attente.';
	}

	/**
	 * Permet de désinscrire un étudiant de la liste d'attente du forum
	 * @param int $idetu L'identifiant de l'étudiant
	 * @return boolean true si tout s'est bien passé, false sinon. La varibable $_SESSION['message'] à été alimentée.
	 */
	public function desinscrireAttenteForum($idetu)
	{
		$bdd = PDO2::getInstance();

		$rang = $this->rangAttenteForum($idetu);

		$donnees = $bdd->query(	'DELETE FROM '.TABLE_ATTENTE_FORUM.'
				WHERE '.ID_FORUM_ATTENTE_FORUM.' = '.$this->get_id().'
				AND '.ID_ETU_ATTENTE_FORUM.' = '.$idetu);

		$result= $bdd->exec('UPDATE '.TABLE_ATTENTE_FORUM.'
				SET '.RANG_ATTENTE_FORUM.' = '.RANG_ATTENTE_FORUM.'-1
				WHERE '.ID_FORUM_ATTENTE_FORUM.' = '.$this->get_id().'
				AND '.RANG_ATTENTE_FORUM.' > '.$rang);

		if(!$donnees)
			$_SESSION['message'] = 'Une erreur est survenu lors de la description à la liste d\'attente.';
		else
			$_SESSION['message'] = 'Vous avez bien été desinscrit de la liste d\'attente.';
	}

	/**
	 * Permet d'ajouter un professeur au forum
	 * @param string $loginProf
	 */
	public function addEnseignant($loginProf)
	{
		$donnees = true;

		$this->set_login_enseignant($loginProf);

		//Mise à jour de la BDD
		$bdd = PDO2::getInstance();
		$donnees = $bdd->query(	'
				UPDATE '.TABLE_FORUM.'
				SET '.LOGIN_PROF_ADC.' = \''.$loginProf.'\'
				WHERE '.ID_FORUM.' = '.$this->get_id().'
				');

		if(!$donnees) // Si la requête à rencontrer des problèmes...
			$_SESSION['message'] = 'Un problème est survenu lors de l\'inscription';
		else
			$_SESSION['message'] = 'Vous avez bien été inscrit à l\'action de communication !';
	}


	/**
	 * Permet de vérifier le formulaire de création et modification d'un forum
	 * @return boolean
	 */
	public function checkCreationForum()
	{
		$_SESSION['message'] = "";
		$retour = true;
		
		if($this->get_date() != null)
		{
			if(!preg_match("!^(0?\d|[12]\d|3[01])/(0?\d|1[012])/((?:19|20)\d{2})$!", $this->get_date()))
			{
				$_SESSION['message'] .= "<br/>Format de la date de déroulement incorrecte elle doit être de la forme jj/mm/aaaa.";
				$retour = false;
			}

		}
		if($this->get_date_limite() != null)
		{
			if(!preg_match("!^(0?\d|[12]\d|3[01])/(0?\d|1[012])/((?:19|20)\d{2})$!", $this->get_date_limite()))
			{
				$_SESSION['message'] .= "<br/>Format de la date limite incorrecte elle doit être de la forme jj/mm/aaaa.";
				$retour = false;
			}
		}
	
		if($this->get_titre() == null || $this->get_lieu() == null)
		{
			$_SESSION['message'] .= "<br/>Vous devez remplir tout les champs obligatoires.";
			return false;
		}
		else
		{
			if($this->get_date() != null)
			{
				$dD = substr($this->get_date(), 0,2);
				$mD = substr($this->get_date(), 3,2);
				$yD = substr($this->get_date(), 6,4);
				$dateJour = date("d/m/Y");
				$dJ = substr($dateJour, 0,2);
				$mJ = substr($dateJour, 3,2);
				$yJ = substr($dateJour, 6,4);
				if( ($yJ > $yD) || ($yJ == $yD && $mJ > $mD) || ($yJ == $yD && $mJ == $mD && $dJ > $dD))
				{
					$_SESSION['message'] .= "<br/>La date de déroulement doit être supérieur à celle du jour.";
					$retour = false;
				}

				if($this->get_date_limite() != null)
				{
					$dL = substr($this->get_date_limite(), 0,2);
					$mL = substr($this->get_date_limite(), 3,2);
					$yL = substr($this->get_date_limite(), 6,4);
					if( ($yJ > $yL) || ($yJ == $yL && $mJ > $mL) || ($yJ == $yL && $mJ == $mL && $dJ > $dL))
					{
						$_SESSION['message'] .= "<br/>La date limite entrée doit être supérieur à celle du jour.";
						$retour = false;
					}
					if( ($yL > $yD) || ($yL == $yD && $mL > $mD) || ($yL == $yD && $mL == $mD && $dL > $dD))
					{
						$_SESSION['message'] .= "<br/>La date limite entrée doit être antérieure à la date de déroulement.";
						$retour = false;
					}
				}
			}
			elseif($this->get_date_limite() != null && $this->get_date() == null)
			{
				$_SESSION['message'] .= "<br/>Vous devez entrez une date de déroulement pour indiquer une date limite.";
				$retour = false;
			}
			return $retour;
		}
	}

	/*Méthode tableau de bord*/

	/**
	 * Méthode static permettant de récupérer tous les forums selon la date.
	 * @param $date
	 * @return $forum Tableau avec toutes les actions de communication de la base de données
	 */
	public static function getAllForumDate($date)
	{
		$forum = false;

		// On se connecte  à la BDD
		$bdd = PDO2::getInstance();

		if($date != 0)
			$donnees = $bdd->query(REQ_ALL_FORUM.'
					WHERE '.DATE_FORUM.' <= "'.$date.'"
					AND F.'.ETAT_FORUM.' <> 4
					ORDER BY YEAR('.DATE_FORUM.'), MONTH('.DATE_FORUM.'), DAY('.DATE_FORUM.')'); // On lance la requête
		else
			$donnees = $bdd->query(REQ_ALL_FORUM.'
					WHERE '.DATE_FORUM.' <= ADDDATE(NOW(),30)
					AND F.'.ETAT_FORUM.' <> 4
					ORDER BY YEAR('.DATE_FORUM.'), MONTH('.DATE_FORUM.'), DAY('.DATE_FORUM.')'); // On lance la requête

		$donnees = $donnees->fetchAll(); // On recupére toutes les données sous forme d'un tableau associatif

		foreach($donnees as $d)
		{
			$forum[] = new Forum($d[ID_FORUM], $d[ETAT_FORUM], $d[TITRE_FORUM], $d[COMMENTAIRE_FORUM], $d[DATE_FORUM], $d[DATE_LIMITE_FORUM], $d[HEURE_DEB_FORUM], $d[HEURE_FIN_FORUM], $d[NOTE_MAX_FORUM], $d[LIEU_FORUM], $d[NOM_LYCEE_FORUM], $d[LOGIN_PROF], $d[ID_ETU1_FORUM], $d[ID_ETU2_FORUM], $d[NOTE1_FORUM], $d[NOTE2_FORUM], $d[ID_ADC_FORUM]);
		}

		return $forum;
	}

	/**
	 * Méthode static permettant de récupérer tous les forums de la base de données.
	 * @return $forum Tableau avec tous les forums de la base de données
	 */
	public static function getAllForumAdmin($filtre)
	{
		$forum = array();
		$bdd = PDO2::getInstance();

		if($filtre == DATE_FORUM)
			$donnees = $bdd->query(REQ_ALL_FORUM.'
									WHERE '.TITRE_FORUM.' <> "'.LUNDI.'"
									ORDER BY YEAR('.$filtre.'), MONTH('.$filtre.'), DAY('.$filtre.')');
		else
			$donnees = $bdd->query(REQ_ALL_FORUM.'
					WHERE '.TITRE_FORUM.' <> "'.LUNDI.'"
					ORDER BY '.$filtre);

		$donnees = $donnees->fetchAll(); // On recupére toutes les données sous forme d'un tableau associatif

		foreach($donnees as $d)
		{
			$forum[] = new Forum($d[ID_FORUM], $d[ETAT_FORUM], $d[TITRE_FORUM], $d[COMMENTAIRE_FORUM], $d[DATE_FORUM], $d[DATE_LIMITE_FORUM], $d[HEURE_DEB_FORUM], $d[HEURE_FIN_FORUM], $d[NOTE_MAX_FORUM], $d[LIEU_FORUM], $d[NOM_LYCEE_FORUM], $d[LOGIN_PROF], $d[ID_ETU1_FORUM], $d[ID_ETU2_FORUM], $d[NOTE1_FORUM], $d[NOTE2_FORUM], $d[ID_ADC_FORUM]);
		}

		return $forum;
	}

	/**
	 * Méthode static permettant de récupérer tous les forums de la base de données selon leur état.
	 * @param $idetat
	 * @return $forum Tableau avec tous les forums de la base de données
	 */
	public static function getAllForumEtat($idetat, $filtre)
	{
		$forum = array();
		$bdd = PDO2::getInstance();
		if($filtre == DATE_FORUM)
			$donnees = $bdd->query(REQ_ALL_FORUM.'
					WHERE '.TITRE_FORUM.' <> "'.LUNDI.'"
					AND F.'.ETAT_FORUM.' = '.$idetat.'
					ORDER BY YEAR('.$filtre.'), MONTH('.$filtre.'), DAY('.$filtre.')');
		else
			$donnees = $bdd->query(REQ_ALL_FORUM.'
					WHERE '.TITRE_FORUM.' <> "'.LUNDI.'"
					AND F.'.ETAT_FORUM.' = '.$idetat.'
					ORDER BY '.$filtre);

		$donnees = $donnees->fetchAll(); // On recupére toutes les données sous forme d'un tableau associatif

		foreach($donnees as $d)
		{
			$forum[] = new Forum($d[ID_FORUM], $d[ETAT_FORUM], $d[TITRE_FORUM], $d[COMMENTAIRE_FORUM], $d[DATE_FORUM], $d[DATE_LIMITE_FORUM], $d[HEURE_DEB_FORUM], $d[HEURE_FIN_FORUM], $d[NOTE_MAX_FORUM], $d[LIEU_FORUM], $d[NOM_LYCEE_FORUM], $d[LOGIN_PROF], $d[ID_ETU1_FORUM], $d[ID_ETU2_FORUM], $d[NOTE1_FORUM], $d[NOTE2_FORUM], $d[ID_ADC_FORUM]);
		}

		return $forum;
	}

	/**
	 * Méthode static permettant de récupérer tous les forums incomplèts.
	 * @return $forum Tableau avec  tous les forums de la base de données
	 */
	public static function getAllForumIncomplets($filtre)
	{
		$forum= array();
		$bdd = PDO2::getInstance();
		if($filtre == DATE_FORUM)
			$donnees = $bdd->query(REQ_ALL_FORUM.'
					WHERE '.TITRE_FORUM.' <> "'.LUNDI.'"
					AND ('.DATE_FORUM.' IS NULL
					OR '.NOTE_MAX_FORUM.' IS NULL
					OR F.'.LOGIN_PROF_FORUM.' IS NULL
					OR '.HEURE_DEB_FORUM.' IS NULL
					OR '.HEURE_FIN_FORUM.' IS NULL)
					ORDER BY YEAR('.$filtre.'), MONTH('.$filtre.'), DAY('.$filtre.')');
		else
			$donnees = $bdd->query(REQ_ALL_FORUM.'
					WHERE '.TITRE_FORUM.' <> "'.LUNDI.'"
					AND ('.DATE_FORUM.' IS NULL
					OR '.NOTE_MAX_FORUM.' IS NULL
					OR F.'.LOGIN_PROF_FORUM.' IS NULL
					OR '.HEURE_DEB_FORUM.' IS NULL
					OR '.HEURE_FIN_FORUM.' IS NULL)
					ORDER BY F.'.$filtre);

		$donnees = $donnees->fetchAll(); // On recupére toutes les données sous forme d'un tableau associatif

		foreach($donnees as $d)
		{
			$forum[] = new Forum($d[ID_FORUM], $d[ETAT_FORUM], $d[TITRE_FORUM], $d[COMMENTAIRE_FORUM], $d[DATE_FORUM], $d[DATE_LIMITE_FORUM], $d[HEURE_DEB_FORUM], $d[HEURE_FIN_FORUM], $d[NOTE_MAX_FORUM], $d[LIEU_FORUM], $d[NOM_LYCEE_FORUM], $d[LOGIN_PROF], $d[ID_ETU1_FORUM], $d[ID_ETU2_FORUM], $d[NOTE1_FORUM], $d[NOTE2_FORUM], $d[ID_ADC_FORUM]);
		}

		return $forum;
	}

	/**
	 * Méthode static permettant de récupérer  tous les forums à noter.
	 * @return $forum Tableau avec  tous les forums de la base de données
	 */
	public static function getAllForumANoter($filtre)
	{
		$forum= array();
		$bdd = PDO2::getInstance();
		if($filtre == DATE_FORUM)
			$donnees = $bdd->query(REQ_ALL_FORUM.'
					WHERE '.TITRE_FORUM.' <> "'.LUNDI.'"
					AND F.'.ETAT_ADC.' = 4
					AND ('.NOTE1_FORUM.' = NULL
					OR '.NOTE2_FORUM.' = NULL)
					ORDER BY YEAR('.$filtre.'), MONTH('.$filtre.'), DAY('.$filtre.')');
		else
			$donnees = $bdd->query(REQ_ALL_FORUM.'
					WHERE '.TITRE_FORUM.' <> "'.LUNDI.'"
					AND F.'.ETAT_ADC.' = 4
					AND ('.NOTE1_FORUM.' = NULL
					OR '.NOTE2_FORUM.' = NULL)
					ORDER BY '.$filtre);

		$donnees = $donnees->fetchAll(); // On recupére toutes les données sous forme d'un tableau associatif

		foreach($donnees as $d)
		{
			$forum[] = new Forum($d[ID_FORUM], $d[ETAT_FORUM], $d[TITRE_FORUM], $d[COMMENTAIRE_FORUM], $d[DATE_FORUM], $d[DATE_LIMITE_FORUM], $d[HEURE_DEB_FORUM], $d[HEURE_FIN_FORUM], $d[NOTE_MAX_FORUM], $d[LIEU_FORUM], $d[NOM_LYCEE_FORUM], $d[LOGIN_PROF], $d[ID_ETU1_FORUM], $d[ID_ETU2_FORUM], $d[NOTE1_FORUM], $d[NOTE2_FORUM], $d[ID_ADC_FORUM]);
		}

		return $forum;
	}

	/*Getters et Setters*/

	/**
	 * Fonction permettant de récupérer l'identifiant du forum
	 * @return int
	 */
	public function get_id()
	{
		return $this->_id;
	}

	/**
	 * Fonction permettant de modifier l'identifiant du forum
	 * @param int
	 */
	public function set_id($id)
	{
		$this->_id=$id;
	}

	/**
	 * Fonction permettant de récupérer l'action associée au forum
	 * @access public
	 * @return ActionDeCommunication
	 */
	public function get_adc()
	{
		$adc = new ActionDeCommunication($this->get_id_adc());
		$adc->getOneADC();
		return $adc;
	}

	/**
	 * Fonction permettant de récupérer l'action associée au forum
	 * @return int
	 */
	public function get_id_adc()
	{
		return $this->_id_adc;
	}

	/**
	 * Fonction permettant de modifier l'action associé au forum
	 * @param int
	 */
	public function set_id_adc($id)
	{
		$this->_id_adc=$id;
	}

	/**
	 * Fonction permettant de récupérer le titre du forum
	 * @return string
	 */
	public function get_titre()
	{
		return $this->_titre;
	}

	/**
	 * Fonction permettant de modifier le titre du forum
	 * @param string
	 */
	public function set_titre($titre)
	{
			$this->_titre = $titre;
	}

	/**
	 * Fonction permettant de récupérer le commentaire du forum
	 * @return string
	 */
	public function get_commentaire()
	{
		return $this->_commentaire;
	}

	/**
	 * Fonction permettant de modifier le commentaire du forum
	 * @param string
	 */
	public function set_commentaire($commentaire)
	{
		$this->_commentaire = $commentaire;
	}

	/**
	 * Fonction permettant de récupérer la date du forum
	 * @return date
	 */
	public function get_date()
	{
		return $this->_date;
	}

	public function get_dateAAAA_MM_JJ()
	{
		if($this->get_date()!="")
			return $this->putDateAAAAMMJJ($this->get_date());
		else
			return "";
	}

	/**
	 * Fonction permettant de modifier la date du forum
	 * @param date
	 */
	public function set_date($date)
	{
		$this->_date=$date;
	}

	/**
	 * Fonction permettant de récupérer la date limite d'inscription au forum
	 * @return date
	 */
	public function get_date_limite()
	{
		return $this->_date_limite;
	}

	public function get_date_limiteAAAA_MM_JJ()
	{
		if($this->get_date_limite()!="")
			return $this->putDateAAAAMMJJ($this->get_date_limite());
		else
			return "";
	}

	/**
	 * Fonction permettant de modifier la date  limite d'inscription au forum
	 * @param date
	 */
	public function set_date_limite($date)
	{
		$this->_date_limite=$date;
	}
	/**
	 * Fonction permettant de récupérer le lieu du forum
	 * @return string
	 */
	public function get_lieu()
	{
		return $this->_lieu;
	}

	/**
	 * Fonction permettant de modifier le lieu du forum
	 * @param string
	 */
	public function set_lieu($lieu)
	{
		$this->_lieu=$lieu;
	}

	/**
	 * Fonction permettant de récupérer la note maximum du forum
	 * @return float
	 */
	public function get_note_max()
	{
		return $this->_note_max;
	}

	/**
	 * Fonction permettant de modifier la note maximum du forum
	 * @param float
	 */
	public function set_note_max($note_max)
	{
		$this->_note_max=$note_max;
	}

	/**
	 * Fonction permettant de récupérer le nom du lycée
	 * @return string
	 */
	public function get_nomLycee()
	{
		return $this->_nomLycee;
	}

	/**
	 * Fonction permettant de modifier le nom du lycée
	 * @param string
	 */
	public function set_nomLycee($nomLycee)
	{
		$this->_nomLycee=$nomLycee;
	}

	/**
	 * Fonction permettant de récupérer l'heure de début du forum
	 * @return string
	 */
	public function get_heureDeb()
	{
		return $this->_heureDeb;
	}

	/**
	 * Fonction permettant de modifier l'heure de début du forum
	 * @param string
	 */
	public function set_heureDeb($heureDeb)
	{
		$this->_heureDeb=$heureDeb;
	}

	/**
	 * Fonction permettant de récupérer l'heure de la fin du forum
	 * @return string
	 */
	public function get_heureFin()
	{
		return $this->_heureFin;
	}

	/**
	 * Fonction permettant de modifier l'heure de la fin du forum
	 * @param string
	 */
	public function set_heureFin($heureFin)
	{
		$this->_heureFin=$heureFin;
	}

	/**
	 * Fonction permettant de récupérer l'enseignant affecté au forum
	 * @access public
	 * @return Enseignant
	 */
	public function get_enseignant()
	{
		$e = new Enseignant($this->get_login_enseignant());
		$e->getOneEnseignant();
		return $e;
	}

	/**
	 * Fonction permettant de récupérer le login de l'enseignant affecté au forum
	 * @return string
	 */
	public function get_login_enseignant()
	{
		return $this->_login_enseignant;
	}

	/**
	 * Fonction permettant de modifier l'enseignant  affecté au forum
	 * @param string
	 */
	public function set_login_enseignant($enseignant)
	{
		$this->_login_enseignant=$enseignant;
	}

	/**
	 * Fonction permettant de récupérer l'état du forum.
	 * @access public
	 * @return Etat
	 */
	public function get_etat()
	{
		$e = new Etat($this->get_id_etat());
		$e->getOneEtat();
		return $e;
	}


	/**
	 * Fonction permettant de récupérer l'état du forum
	 * @return int
	 */
	public function get_id_etat()
	{
		return $this->_id_etat;
	}

	/**
	 * Fonction permettant de modifier l'état du forum
	 * @param int
	 */
	public function set_id_etat($etat)
	{
		$this->_id_etat=$etat;
	}

	/**
	 * Fonction permettant de récupérer l'étudiant 1 du forum.
	 * @access public
	 * @return Etudiants
	 */
	public function get_etudiant1()
	{
		$e = new Etudiants($this->get_id_etu1());
		$e->getOneEtudiant();
		return $e;
	}

	/**
	 * Fonction permettant de récupérer l'id de l'étudiant 1
	 * @return int
	 */
	public function get_id_etu1()
	{
		return $this->_id_etu1;
	}

	/**
	 * Fonction permettant de modifier l'étudiant 1
	 * @param int
	 */
	public function set_id_etu1($etu1)
	{
		$this->_id_etu1=$etu1;
	}

	/**
	 * Fonction permettant de récupérer l'étudiant 2 du forum.
	 * @access public
	 * @return Etudiants
	 */
	public function get_etudiant2()
	{
		$e = new Etudiants($this->get_id_etu2());
		$e->getOneEtudiant();
		return $e;
	}

	/**
	 * Fonction permettant de récupérer l'id de l'étudiant 2
	 * @return int
	 */
	public function get_id_etu2()
	{
		return $this->_id_etu2;
	}

	/**
	 * Fonction permettant de modifier l'étudiant 2
	 * @param int
	 */
	public function set_id_etu2($etu2)
	{
		$this->_id_etu2=$etu2;
	}

	/**
	 * Fonction permettant de récupérer la note de l'étudiant 1 du forum
	 * @return float
	 */
	public function get_note_etu1()
	{
		return $this->_note_etu1;
	}

	/**
	 * Fonction permettant de modifier la note de l'étudiant 1 du forum
	 * @param float
	 */
	public function set_note_etu1($note_etu1)
	{
		$this->_note_etu1=$note_etu1;
	}

	/**
	 * Fonction permettant de récupérer la note de l'étudiant 2 du forum
	 * @return float
	 */
	public function get_note_etu2()
	{
		return $this->_note_etu2;
	}

	/**
	 * Fonction permettant de modifier la note de l'étudiant 2 du forum
	 * @param float
	 */
	public function set_note_etu2($note_etu2)
	{
		$this->_note_etu2=$note_etu2;
	}
}


?>